﻿// P149 最大gcd.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

/*
https://www.starrycoding.com/problem/149
给定一个长度为n的数组a，
你可以将其中的某个数字替换为任意一个其他数字（此操作只能执行一次，也可以不操作），请问最大可以使得整个数组的gcd为多少？


第一行一个整数T表示测试用例个数。(1≤T≤1000)

对于每组测试用例：

第一行一个整数n(2≤n≤105 )。

第二行n个整数表示数组a(1≤ai≤109)。

数据保证
∑n≤10^6

4
3
61 40 2
7
92 68 20 54 14 33 82
3
39 88 18
2
57 75


2
2
3
75
*/


#include <iostream>

using namespace std;

const int N = 200010;
int arr[N];
int forw[N];
int back[N];


int gcd(int a, int b)
{
    return b ? gcd(b, a % b) : a;
}

void solve() {
    int n; cin >> n;
  /*  memset(arr, 0, sizeof arr);
    memset(forw, 0, sizeof forw);
    memset(back, 0, sizeof back);*/

    for (int i = 1; i <= n; i++) cin >> arr[i];
    forw[1] = arr[1];
    for (int i = 2; i <= n; i++) {
        forw[i] = gcd(arr[i], forw[i - 1]);
    }
    back[n] = arr[n];
    for (int i = n-1; i >= 1; i--) {
        back[i] = gcd(arr[i], back[i + 1]);
    }
    int ans = 0;
    for (int i = 1; i <= n; i++) {
        int curr = 999999999;
        if (i == 1) {
            curr = min(curr, back[i + 1]);
        }
        else if (i == n) {
            curr = min(curr, forw[i - 1]);
        }
        else {
            curr = gcd(back[i + 1], forw[i - 1]);
        }

        ans = max(ans, curr);
    }
    cout << ans << endl;
}


int main()
{
    int T;
    cin >> T;
    while (T--) {
        solve();
    }

    return 0;
}
 